home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir35 / cff51b.zip / CFF.H < prev    next >
C/C++ Source or Header  |  1993-10-22  |  15KB  |  533 lines

  1. /* CFF.H    -- user api include file for the cff library */
  2.  
  3.  
  4. #ifdef __GNUC__
  5. typedef unsigned long long  KeyItem;   /* type for a key's associated item */
  6. #endif
  7.  
  8.  
  9. typedef union             /* 2 BYTES */
  10.     {
  11.         unsigned short val;
  12.         unsigned char b[2];
  13. } SVAL;
  14.  
  15. typedef union            /* 4 BYTES */
  16.     {
  17.     unsigned long a0;
  18.     void *a1;
  19.     struct
  20.         {
  21.         SVAL    lo_word;
  22.         SVAL    hi_word;
  23.         } a2;
  24.     struct
  25.         {
  26.             unsigned int pad :28;
  27.             unsigned int type :4;
  28.         } a3;
  29.     struct
  30.         {
  31.             unsigned char b[4];
  32.         } a4;
  33. } ADDR;
  34.  
  35. typedef union _stor    /* 8 BYTES */
  36.     {
  37.     unsigned long    a0;
  38.     void *a1;
  39. #ifdef __GNUC__
  40.     KeyItem item;
  41. #endif
  42.     struct
  43.         {
  44.         unsigned short    lo_word;
  45.         unsigned short    hi_word;
  46.         unsigned int size :28;        /* in bytes or nibbles */
  47.         unsigned int type :4;        /* describes the STOR type */
  48.         } a2;
  49.     struct
  50.         {
  51.             short s0;
  52.             short s1;
  53.             short s2;
  54.             short s3;
  55.         } a3;
  56.     struct
  57.         {
  58.             unsigned long    s0;
  59.             unsigned long    s1;
  60.         } a4;
  61.     struct
  62.         {
  63.             unsigned char    b[8];
  64.         } a5;
  65. #ifdef __GNUC__
  66.     struct
  67.         {
  68.             unsigned long long dupname :48;
  69.             unsigned long long dupid :16;
  70.         } a6;
  71. #endif
  72.     struct
  73.         {
  74.             unsigned int home : 30;
  75.             unsigned int full : 2;
  76.         } a7;
  77. } STOR, Item;
  78.  
  79. /* DEFINITIONS FOR "a2.type */
  80. #define STO_INACTIVE (0)
  81. #define STO_NIL  (1)
  82. #define STO_VALUE (2)    
  83. #define STO_CHUNK (3)
  84. #define STO_KEYINFO (4)
  85. #define STO_NILCHUNK (5)
  86. #define STO_COMPCHUNK (6)
  87. #define STO_ALLOCATED (7)
  88. #define STO_DELETED (8)    /* always ored with non zero */
  89. #define STOMASK (7)
  90.  
  91. typedef struct {
  92.     unsigned long    name;
  93.     unsigned short    xname;
  94.     unsigned short    id;
  95. } DupName;
  96.  
  97. typedef struct            /* 12 BYTES */
  98.     {
  99.         STOR c0;
  100.         ADDR c1;
  101.     } CAT;
  102. #define CATEXACT  (8)
  103. #define CATHASH (cat.c1.a0)
  104.  
  105. typedef struct    /* 20 bytes */
  106.     {
  107.         STOR    stor;
  108.         CAT        cat;
  109. } SDB;
  110.  
  111.  
  112. /* DEFINE CFF OPEN MODES */
  113.  
  114. #define F_RDONLY    (0x0001)
  115. #define F_WRONLY    (0x0002)
  116. #define F_RDWR        (0x0003)
  117. #define F_CREAT        (0x0004)
  118. #define F_TEMP        (0x0008)
  119. #define F_UNIQ        (0x0010)
  120. #define F_EXCL        (0x0020)
  121. #define F_BITMAP    (0x0040)
  122. #define F_TRUNC        (0x0080)
  123. #define F_APPEND    (0x0100)
  124. #define F_DELETING    (0x0200)
  125. #define F_FILEONLY    (0x0400)
  126. #define F_BIGDIR    (0x0800)
  127. #define F_HUGEDIR    (0x1000)
  128. #define F_SETUP        (0x4000)
  129. #define F_PARENTS    (0x4000)
  130. #define F_SORTED    (0x8000)
  131. #define F_UNTAGGED    (0x10000)
  132. #define F_STAT        (0x20000)    /* TRULY READONLY */
  133.  
  134. /* BUFFER RELEASE MODES */
  135. #define R_DIRTY        (0x80000000)
  136. #define R_CLEAN        (0x40000000)
  137. #define R_FLUSH        (0x20000000)
  138.  
  139. /* DEFINE SOME SYSTEM CALL VALUES */
  140. #define S_READBLK (1)
  141. #define S_WRITEBLK (2)
  142. #define S_GETSPACE (3)
  143. #define S_GIVESPACE (4)
  144. #define S_CLOSE (5)
  145. #define S_OPEN (6)
  146. #define S_CREATE (7)
  147. #define S_UNLINK (8)
  148. #define S_SEEK (9)
  149. #define S_FLUSH (10)
  150. #define S_CLOSETRUNC (11)
  151.  
  152. #define S_SET (100)
  153. #define S_CUR (200)
  154. #define S_END (300)
  155.  
  156. /* DEFINE CFF OBJECT PROPERTIES -- returned by cfobtype(void *something) */
  157. #define OB_SHARE    (0x00000001)
  158. #define OB_ISDIR    (0x00000002)
  159. #define OB_BMOK        (0x00000004)
  160. #define OB_SMOK        (0x00000008)
  161. #define OB_MEM        (0x00000010)
  162. #define OB_RAWDEV    (0x00000020)
  163. #define OB_CFILE    (0x00000040)
  164. #define OB_SETUP    (0x00000080)
  165. #define OB_FOD        (0x00000100)
  166. #define OB_ROOTDIR    (0x00000200)
  167. #define OB_DIRTY    (0x00000400)
  168. #define OB_DELCLOSE    (0x00000800)
  169. #define OB_WRITE    (0x00001000)
  170. #define OB_BITMAP    (0x00002000)
  171. #define OB_XFILE    (0x00004000)
  172. #define OB_ISNEW    (0x00008000)
  173. #define OB_SMEM        (0x00010000)
  174. #define OB_FILEONLY    (0x40000000)
  175. #define OB_HASHDIR    (0x20000000)
  176. #define OB_TREEDIR    (0x10000000)
  177. #define OB_UNTAGGED (0x08000000)
  178. #define OB_PREALLOC (0x01000000)
  179.  
  180. #ifndef NULL
  181. #define NULL ((void *)0)
  182. #endif
  183. #ifndef EOF
  184. #define EOF     (-1)
  185. #endif
  186. #define YES     (1)
  187. #define NO      (0)
  188. #define OK      (1)
  189. #define NODUPS    (0)
  190. #define OKDUPS    (1)
  191. #define CNTDUPS (2)
  192. #define DUPNAMES (4)
  193.  
  194. #define PREALLOC1 (8)
  195. #define PREALLOC2 (16)
  196. #define PREALLOC3 (32)
  197.  
  198. #define ERROR   (-1)
  199. #define FOUND    (1)
  200. #define NOTFOUND (0)
  201. #define NONE    (-1)    /* no value */
  202. #define INVALID (-4)    /* invalid value */
  203. #define LESS    (-1)    /* a is less than b */
  204. #define EQUAL    (0)        /* a and b are equal */
  205. #define GREATER    (2)        /* a is greater than b */
  206. #define    BOI    (-2)        /* beginning of index */
  207. #define    EOI    (-3)        /* end of index */
  208.  
  209. typedef struct opninfo {
  210.     long initial_entries;
  211.     unsigned long bitmap_prealloc;
  212.     long data_prealloc;
  213. } OPNINFO;
  214.  
  215. typedef struct cfdirent {
  216.     int d_namlen;
  217.     char *d_name;
  218.     unsigned long d_bytesalloc;
  219.     unsigned long d_bytesused;
  220.     unsigned long d_mode;
  221.     unsigned long d_entrycnt;
  222.     void *d_fpt;
  223. } CFDIRENT;
  224.  
  225. /* Function codes for the cfmisc instruction */
  226. enum CfMisc {
  227.     CF_ALLOC,CF_USED,CF_DEPTH,CF_MARK,CF_HEAD,CF_TAIL,CF_NEXT,
  228.     CF_PREV,CF_KEYLEN,CF_DATALEN,CF_MODBUFS,
  229.     CF_CURBUFS,CF_SETKEYCMP,CF_SETITEMCMP,CF_SETERRFUNC,
  230.     CF_LAZY,CF_VERYLAZY,CF_CLRLAZY,CF_ISNEW,CF_FLUSH,
  231.     CF_FILESIZE,CF_FILEALLOC,CF_PREALLOC,CF_ALIGNMENT,
  232.     CF_MAPSIZE,CF_ISSORTED,CF_KEY,CF_ITEM,CF_CREEP,
  233.     CF_SETPRINTFUNC,CF_DATA
  234. };
  235.  
  236. typedef struct cffstat {
  237.         unsigned long    st_smhead;
  238.         unsigned long    st_smtail;
  239.         unsigned short    st_id;
  240.         unsigned short    st_keysize;
  241.  
  242.         STOR           st_dups;
  243.         unsigned long  st_bmhead;
  244.         unsigned long  st_bmtail;
  245.         unsigned long  st_mode;
  246.         short st_uid;
  247.         short st_gid;
  248.         long  st_mtime;
  249.         long  st_ctime;
  250.  
  251.         unsigned long  st_highleaf;
  252.         unsigned long  st_size;
  253.         unsigned long  st_alloc;
  254.         unsigned long  st_entrycnt;
  255.         short            st_mapsize;
  256.         unsigned short st_dupids;
  257.  
  258.         long  st_atime;
  259.         long  st_filesize;
  260.         long  st_filealloc;
  261.         long  st_obtype;
  262.         unsigned int st_filedups;
  263.         long  st_ino;
  264.         short st_blksize;
  265.         short st_dev;
  266.         short st_nlink;
  267.         short st_rdev;
  268. } CFSTAT;
  269.  
  270. /* MODE BITS */
  271. #define M_ROOTDIR    (0x80000000)
  272. #define M_FILEONLY    (0x40000000)
  273. #define M_HASHDIR    (0x20000000)
  274. #define M_TREEDIR    (0x10000000)
  275. #define M_UNTAGGED    (0x08000000)
  276. #define M_BITMAP    (0x04000000)
  277. #define M_EXTRNFILE    (0x02000000)
  278. #define M_PREALLOC    (0x01000000)
  279. #define M_IFMT        (0x000F0000)
  280. #define M_IFDIR        (0x00004000)
  281. #define M_IFIFO        (0x00002000)
  282. #define M_IFCHR        (0x00001000)
  283. #define M_IFBLK        (0x00003000)
  284. #define M_IFREG        (0x00008000)
  285. #define M_IREAD        (0x00000100)
  286. #define M_IWRITE    (0x00000080)
  287. #define M_IEXEC        (0x00000040)
  288.  
  289.  
  290. extern void *PERMCAT;
  291. extern void *PERMINFO;
  292. extern void *PERMFILE;
  293.  
  294. extern char *cff_version;
  295. extern char *cff_copyright;
  296.  
  297. #ifdef __cplusplus
  298. extern "C" {
  299. #endif
  300.  
  301. void cfinit(char *appname, int lbufpages, char *permfile);
  302. void cfexit();
  303. void cfport_settestflags(int flags);
  304.  
  305. void key_hash(void *keyptr, int keysize, CAT *cat);
  306. long rdwr_object(void *handle, void *userbuffer, long amount, int mode);
  307. long seek_object(void *handle, long amount, int mode);
  308.  
  309. #define cfhash(a,b,c) \
  310. key_hash(a,b,c)
  311.  
  312. int cfprintf(void *format, ...);
  313. void cfprintbitmaps(void *something);
  314. void cfprintentries(void *something);
  315. void *cfopen(char *path, long mode, void *info);
  316. void *cfsubopen(void *handle, char *name, long mode, void *info);
  317. void *cfopen_chunk(void *handle, void *item);
  318. void cfclose(void *handle);
  319. int cfunlink(void *something, ... );
  320. int cfstat(void *something, void *stbuf);
  321. void *cfcopy(void *something_dst, void *something_src);
  322. long cfcopy_file(void *handle_dst, void *handle_src);
  323. int cfcopy_object(void *handle_dst, void *handle_src);
  324. void cftotalloc(void *something, unsigned long *used, unsigned long *alloc);
  325. void *cflocalize(void *handle, void *item);
  326. void cfrelease(void *ptr, long mode);
  327.  
  328. #define cfread(a,b,c) \
  329. rdwr_object(a,b,c,S_READBLK)
  330. #define cfwrite(a,b,c) \
  331. rdwr_object(a,b,c,S_WRITEBLK)
  332. #define cfseek(a,b,c) \
  333. seek_object(a,b,c)
  334.  
  335. int cfdef(char *key, char *def);
  336. int cfsysdef(char *key, char *def);
  337. int cfappdef(char *key, char *def);
  338. int cfundef(char *key);
  339. int cfsysundef(char *key); 
  340. int cfappundef(char *key);
  341. int cftrn(char *strn, char **newstrn);
  342. int cfpathtrn(char *strn, char **newstrn);
  343. void cfflush(void *handle);
  344. void cfsync(void);
  345. int cftruncate(void *something, unsigned long size);
  346.  
  347. int cfinsertx(void *handle,void *key,int len,void *item,int dups,void *adup);
  348. #define cfinsert(handle,keyptr,keylen,itemptr) \
  349. cfinsertx(handle,keyptr,keylen,itemptr,NODUPS,NULL)
  350. #define cfinsert_dupnum(handle,keyptr,keylen,itemptr,dupnum) \
  351. cfinsertx(handle,keyptr,keylen,itemptr,OKDUPS,dupnum)
  352. #define cfinsert_dupname(handle,keyptr,keylen,itemptr,dupname) \
  353. cfinsertx(handle,keyptr,keylen,itemptr,DUPNAMES,dupname)
  354.  
  355. int cffindx(void *handle, void *keyptr, int keylen, void *itemptr, void *adup);
  356. #define cffind(handle,key,len,item) \
  357. cffindx(handle,key,len,item,NULL)
  358. #define cffind_dupnum(handle,key,len,item,dupnum) \
  359. cffindx(handle,key,len,item,dupnum)
  360. #define cffind_dupname(handle,dupname,itemptr) \
  361. cffindx(handle,dupname,8,itemptr,(void *)0xffffffff)
  362. #define cfreinsert(handle,key,len,item) \
  363. cffindx(handle,key,-len,item,NULL)
  364. #define cfreinsert_dupnum(handle,key,len,item,dupnum) \
  365. cffindx(handle,key,-len,item,dupnum)
  366. #define cfreinsert_dupname(handle,key,len,itemptr,dupname) \
  367. cffindx(handle,dupname,-8,itemptr,(void *)0xffffffff)
  368.  
  369. int cffind_item(void *handle, void *key, int keylen, void *itemptr);
  370. int cffind_mark(void *handle, void *itemptr);
  371.  
  372. #define cfdelete(a,b,c) \
  373. cfdelete_item(a,b,c,NULL)
  374. int cfdelete_item(void *handle, void *key, int keylen, void *itemptr);
  375. int cfdelete_dupnum(void *handle, void *key, int keylen, long dupnum);
  376. #define cfdelete_lastdupnum(a,b,c) \
  377. cfdelete_dupnum(a,b,c,-1)
  378. int cfdelete_dupname(void *handle, void *key, int keylen, void *dupname);
  379. int cfdelete_lastdupname(void *handle, void *key, int keylen);
  380. int cfdelete_alldupnames(void *handle, void *key, int keylen);
  381. int cfdelete_alldupnums(void *handle, void *key, int keylen);
  382. int cflastdupname(void *handle, void *key, int keylen, void *dupname);
  383.  
  384. long cfpush_item(void *handle, void *itemptr);
  385. long cfpush_data(void *handle, void *datptr, int datsize);
  386. long cfpop_item(void *handle, void *itemptr);
  387. long cfpop_data(void *handle, void *datptr, int datsize);
  388. long cfstackdepth(void *handle);
  389.  
  390. long cfcountdups(void *handle, void *key, int keylen);
  391. long cfmisc(void *something, int func, ...);
  392.  
  393. void *cfopendir(void *path, long *mode);
  394. void cfclosedir(void *it);
  395. CFDIRENT *cfreaddir(void *it);
  396. void cfrewinddir(void *it);
  397. void cftelldir(void *it, STOR *entry);
  398. void cfseekdir(void *it, STOR *entry);
  399. long cfentrycnt(void *something);
  400.  
  401. int cfseq_dupnum(void *handle, void *key, int len, void *itemptr, int mode);
  402. #define cfhead_dupnum(a,b,c,d) cfseq_dupnum(a,b,c,d,CF_HEAD)
  403. #define cftail_dupnum(a,b,c,d) cfseq_dupnum(a,b,c,d,CF_TAIL)
  404. #define cfnext_dupnum(a,b,c,d) cfseq_dupnum(a,b,c,d,CF_NEXT)
  405. #define cfprev_dupnum(a,b,c,d) cfseq_dupnum(a,b,c,d,CF_PREV)
  406.  
  407. int cfseq_dupname(void *handle, void *key, int len, void *itemptr, int mode);
  408. #define cfhead_dupname(a,b,c,d) cfseq_dupname(a,b,c,d,CF_HEAD)
  409. #define cftail_dupname(a,b,c,d) cfseq_dupname(a,b,c,d,CF_TAIL)
  410. #define cfnext_dupname(a,b,c,d) cfseq_dupname(a,b,c,d,CF_NEXT)
  411. #define cfprev_dupname(a,b,c,d) cfseq_dupname(a,b,c,d,CF_PREV)
  412.  
  413.  
  414. #define cfdepth(a) \
  415. cfmisc(a, CF_DEPTH)
  416. #define cfmark(a) \
  417. cfmisc(a, CF_MARK)
  418. #define cfhead(a,b) \
  419. cfmisc(a, CF_HEAD, b)
  420. #define cftail(a,b) \
  421. cfmisc(a, CF_TAIL, b)
  422. #define cfnext(a,b) \
  423. cfmisc(a, CF_NEXT, b)
  424. #define cfprev(a,b) \
  425. cfmisc(a, CF_PREV, b)
  426. #define cfkeycmp(a,b,c,d) \
  427. default_keycmp(a,b,c,d)
  428. #define cfitemcmp(a,b) \
  429. default_itemcmp(a,b)
  430. #define cfkeylen(a,b) \
  431. cfmisc(a, CF_KEYLEN, b)
  432. #define cfdatalen(a,b) \
  433. cfmisc(a, CF_DATALEN, b)
  434. #define cfbytesused(a) \
  435. cfmisc(a, CF_USED)
  436. #define cfbytesalloc(a) \
  437. cfmisc(a, CF_ALLOC)
  438. #define cfmodbufs(a) \
  439. cfmisc(NULL, CF_MODBUFS, a)
  440. #define cfcurbufs() \
  441. cfmisc(NULL, CF_CURBUFS)
  442. #define cfsetkeycmp(a,b) \
  443. cfmisc(a, CF_SETKEYCMP, b)
  444. #define cfsetitemcmp(a,b) \
  445. cfmisc(a, CF_SETITEMCMP, b)
  446. #define cfseterrfunc(a) \
  447. cfmisc(NULL, CF_SETERRFUNC, a)
  448. #define cfsetprintfunc(a) \
  449. cfmisc(NULL, CF_SETPRINTFUNC, a)
  450. #define cfisnew(a) \
  451. cfmisc(a,CF_ISNEW)
  452. void cfpflags(char *name, void *handle);
  453. long cfobtype(void *handle);
  454. #define cfsetverylazy(a) \
  455. cfmisc(a, CF_LAZY)
  456. #define cfsetlazy(a) \
  457. cfmisc(a, CF_VERYLAZY)
  458. #define cfclrlazy(a) \
  459. cfmisc(a, CF_CLRLAZY)
  460. #define cffilesize(a) \
  461. cfmisc(a, CF_FILESIZE)
  462. #define cffilealloc(a) \
  463. cfmisc(a, CF_FILEALLOC)
  464. #define cfprealloc(a) \
  465. cfmisc(a, CF_PREALLOC)
  466. #define cfalignment(a) \
  467. cfmisc(a, CF_ALIGNMENT)
  468. #define cfmapsize(a) \
  469. cfmisc(a, CF_MAPSIZE)
  470. #define cfissorted(a) \
  471. cfmisc(a, CF_ISSORTED)
  472. #define cfkey(ccb,key,len) \
  473. cfmisc(ccb, CF_KEY, key, len)
  474. #define cfitem(ccb, item) \
  475. cfmisc(ccb, CF_ITEM, item)
  476. #define cfdata(ccb, buf, len) \
  477. cfmisc(ccb, CF_DATA, buf, len)
  478.  
  479. void *cfgetspace(void *handle, long amount, void *addr);
  480. int cfretspace(void *handle, void *addr);
  481.  
  482. void *cfputx(void *handle, void *keyptr, int keylen, void *itemptr,
  483.                     int dupflg, void *adup, void *bufptr, long buflen);
  484. #define cfput(handle,key,len,buf,buflen,itemptr) \
  485. cfputx(handle,key,len,itemptr,NODUPS,NULL,buf,buflen)
  486. #define cfput_dupnum(handle,key,len,buf,buflen,itemptr,dupnum) \
  487. cfputx(handle,key,len,itemptr,OKDUPS,dupnum,buf,buflen)
  488. #define cfput_dupname(handle,key,len,buf,buflen,itemptr,dupname) \
  489. cfputx(handle,key,len,itemptr,DUPNAMES,dupname,buf,buflen)
  490. #define cfreput(handle,key,len,buf,buflen,itemptr) \
  491. cfputx(handle,key,len,itemptr,NODUPS,NULL,buf,-buflen)
  492. #define cfreput_dupnum(handle,key,len,buf,buflen,itemptr,dupnum) \
  493. cfputx(handle,key,len,itemptr,OKDUPS,dupnum,buf,-buflen)
  494. #define cfreput_dupname(handle,key,len,buf,buflen,itemptr,dupname) \
  495. cfputx(handle,key,len,itemptr,DUPNAMES,dupname,buf,-buflen)
  496.  
  497.  
  498. int cfgetx(void *handle, void *keyptr, int keylen,
  499.                     void *bufptr, long buflen, void *adup);
  500. #define cfget(handle,key,len,buf,buflen) \
  501. cfgetx(handle,key,len,buf,buflen,NULL)
  502. #define cfget_dupnum(handle,key,len,buf,buflen,dupnum) \
  503. cfgetx(handle,key,len,buf,buflen,dupnum)
  504. #define cfget_dupname(handle,dupname,buf,buflen) \
  505. cfgetx(handle,dupname,8,buf,buflen,(void *)0xffffffff)
  506.  
  507.  
  508. void *malloc(size_t);
  509. void free(void *);
  510. unsigned mallocsize(const void *);
  511.  
  512. #if 0 /* some include files use size_t for these functions */
  513. void *calloc(unsigned, unsigned);
  514. void *realloc(void *, unsigned);
  515. void *memalign(unsigned, unsigned);
  516. void *valloc(unsigned);
  517. #endif
  518.  
  519. void *mallocC(long, unsigned);
  520. void *callocC(long, unsigned, unsigned);
  521. void *reallocC(long, void *, unsigned);
  522. void *vallocC(long, unsigned);
  523. void *memalignC(long, unsigned, unsigned);
  524. void freeC(long, void *);
  525. void freecat(long);
  526. void *cfmalloc(unsigned, STOR *);
  527. void cffree(STOR *);
  528.  
  529. #ifdef __cplusplus
  530. }
  531. #endif
  532.  
  533.